import axios from 'axios';
import store from '../store/store';
import { message } from 'antd';
import { tansParams } from '../utils/bigwolf'
import { getToken } from '../utils/auth'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建 Axios 实例
const api = axios.create({
  baseURL: "/api",
  timeout: 5000,
});

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // const token = localStorage.getItem("token");
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`;
    // }
    
    //const token = store.getState().user.token;
    const token = getToken();
    //console.log('==interceptors=token===',token);
    const isToken = (config.headers || {}).isToken === false;
    if(token && !isToken){
      config.headers['Authorization'] = 'Bearer ' + token;
    }
      // get请求映射params参数
    if (config.method === 'get' && config.params) {
      let url = config.url + '?' + tansParams(config.params);
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    return config;
  },
  (error) => {
      let { message: errorMessage } = error;
      try {
        // 尝试使用antd message
        message.error(errorMessage, 5);
      } catch (err) {
        // 如果失败，使用原生alert
        alert(errorMessage);
      }

      return Promise.reject(error);
    }
);

  
  // 响应拦截器
  api.interceptors.response.use(
    response => {
      console.log('==interceptors=response===',response);
      // 对响应数据做点什么
      const code = response.data.code;
      const msg = response.data.msg; 
      
      if(code === 403) {
        const messageText = '登录超时，请重新登录';
        try {
          message.error(messageText, 5);
        } catch (err) {
          alert(messageText);
        }
        // 返回一个带有自定义信息的resolved promise，而不是rejected，这样就不会触发全局错误处理
        return Promise.resolve({ success: false, message: messageText, code: code });
      }
      if(code !== 200) {
        try {
          message.error(msg, 5);
        } catch (err) {
          alert(msg);
        }
        // 返回一个带有自定义信息的resolved promise
        return Promise.resolve({ success: false, message: msg, code: code });
      } else {
        return Promise.resolve(response.data);
      }
    },
    error => {
      console.log('==interceptors=error===',error);
      // 对响应错误做点什么
      let errorMessage = '网络错误，请稍后重试';
      
      // 提取更具体的错误信息
      if (error.response) {
        // 服务器返回了错误状态码
        errorMessage = error.response.data?.msg || error.response.statusText || errorMessage;
      } else if (error.request) {
        // 请求发出但没有收到响应
        errorMessage = '请求超时，请检查网络连接';
      } else {
        // 设置请求时发生错误
        errorMessage = error.message || errorMessage;
      }
      
      try {
        message.error(errorMessage, 5);
      } catch (err) {
        alert(errorMessage);
      }
      // 返回一个带有自定义信息的resolved promise，防止错误传播到全局错误处理器
      return Promise.resolve({ success: false, message: errorMessage, isAxiosError: true });
    }
  );

  export default api;